#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <string.h>
#include <ctype.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netdb.h>
#include <errno.h>
#include <time.h>

#define SEND_MESSAGE_ERROR 0
#define SEND_MESSAGE_OK 1
#define MESSAGE_BUFFER_SIZE 256


/***********************************************************
 *
 *	ESTRUCTURAS - UNIONS - ENUMS
 *
 ***********************************************************/

/*-- Enum con los tipos de mensajes --*/
enum accion{	
		UPDATE_STATUS,			/*-- Mensaje de actualizacion de estado para el ACR --*/
		PPCB_ACCEPT,			/*-- Mensaje de aceptacion para el PPCB --*/
		PPCB_OPERATION,			/*-- Mensaje de Operacion (instruccion argumento) --*/
		PPCB_INIDAT,			/*-- Mensaje de inicio para el PPCB --*/		
		PPCB_ASIGNREC,			/*-- Mensaje de asignacion de recurso para el PPCB --*/		
		PPCB_DENREC,			/*-- Mensaje de denegacion de recurso para el PPCB --*/		
		PPCB_RECSINPER,			/*-- Mensaje de no permiso sobre recurso para el PPCB --*/		
		PPCB_MATATE,			/*-- Mensaje de MATATE para el PPCB --*/		
		PPCB_TFINAL,			/*-- Mensaje de tiempo para finalizar para el PPCB --*/		
		PPCB_FINQUANTUM,		/*-- Mensaje de fin de quantum --*/
		PPCB_TENESQUANTUM,		/*-- Mensaje de inicio de quantum --*/
		PPCB_MIGRAR,			/*-- Mensaje de migracion de PPCB --*/
		ACR_PETREC,			/*-- Mensaje de peticion de recurso --*/
		ACR_LIBREC,			/*-- Mensaje de liberacion de recurso --*/
		ACR_FINOK,			/*-- Mensaje de liberacion de recurso --*/
		ACR_FINANORMAL,			/*-- Mensaje de liberacion de recurso --*/
		ACR_IMP,			/*-- Mensaje de impresion de texto --*/
		ACR_POP				/*-- Mensaje de POP para el acr --*/
	   };

typedef enum accion ACTION;

/* void sendOperationsMessages(Tnodo** lista, int clave, int socket); */
/***********************************************************
 *
 *	FUNCIONES	
 *
 ***********************************************************/
/* void sendOperationsMessages(Tnodo **lista, int clave, int socket); */
/*-- Envia un mensaje al socket pasado como parametro --*/
int sendMessage(int , char* );

int receiveMessage(int socket, char* messageToReceive);
